from functools import wraps
from flask import g, redirect, url_for


def login_required(func):
    # 保留func的信息
    @wraps(func)
    # func(a,b,c)
    # func(1,2,c=1)
    # 1 2 存在args中
    # c=1 存在kwargs中
    def inner(*args, **kwargs):
        if g.user:
            return func(*args, **kwargs)
        else:
            return redirect(url_for('auth.login'))
    return inner


# 举个例子
# 关于装饰器
# @login_required
# def public_question(question_id):
#     pass
# 有上面一个函数举例
# 相当于下面 函数
# login_required(public_question)(question_id)

# login_required(public_question) 函数执行完之后会返回新的函数inner 再把(question_id)参数传给inner这个函数
# 判断有没有g.user
# 如果有 就正常执行fun 也就是public_question 这个函数
# 如果没有就执行return这个语句